home *** CD-ROM | disk | FTP | other *** search
- UNIT JoyStick;
-
- INTERFACE
-
- USES
- Crt;
-
- VAR
- GlobalInit:BOOLEAN;
- XPos,YPos,MaxX,MaxY,MinX,MinY:INTEGER;
- OV1,NH1,EJ1:STRING;
- OV2,NH2,EJ2:STRING;
- DeltaX1,DeltaY1,GrenseX1a,GrenseX1b,GrenseY1a,GrenseY1b:INTEGER;
- DeltaX2,DeltaY2,GrenseX2a,GrenseX2b,GrenseY2a,GrenseY2b:INTEGER;
- X1a,X1b,Y1a,Y1b:INTEGER;
- X2a,X2b,Y2a,Y2b:INTEGER;
- XRes1,YRes1:BYTE;
- XRes2,YRes2:BYTE;
-
-
- {═════════════════════════════════ Global ═════════════════════════════════}
- PROCEDURE Grenser(X1,Y1,X2,Y2:INTEGER);
- PROCEDURE VisPos(ForSinkelse:INTEGER);
- PROCEDURE SettPos(X,Y:INTEGER);
- PROCEDURE HentXY(VAR X,Y:INTEGER);
- {═════════════════════════════════Joystick 1═════════════════════════════════}
- PROCEDURE JoyStick1(VAR X,Y,K1,K2:INTEGER);
- FUNCTION Stick1(VAR XRet,YRet:INTEGER):INTEGER;
- PROCEDURE Initier1(A,B:BYTE);
- PROCEDURE FinJuster1;
- {═════════════════════════════════Joystick 2═════════════════════════════════}
- PROCEDURE JoyStick2(VAR X,Y,K1,K2:INTEGER);
- FUNCTION Stick2(VAR XRet,YRet:INTEGER):INTEGER;
- PROCEDURE Initier2(A,B:BYTE);
- PROCEDURE FinJuster2;
- {═════════════════════════════════Programmer═════════════════════════════════}
-
- IMPLEMENTATION
-
-
- {═════════════════════════════════ Global ═════════════════════════════════}
-
- PROCEDURE Grenser(X1,Y1,X2,Y2:INTEGER);
- BEGIN
- MinX:=X1; MaxX:=X2;
- MinY:=Y1; MaxY:=Y2;
- GlobalInit:=TRUE;
- END;
-
- PROCEDURE VisPos(ForSinkelse:INTEGER);
- VAR
- A:BYTE;
- BEGIN
- IF GlobalInit THEN
- BEGIN
- A:=Mem[$B800:(XPos+YPos*80)*2-161];
- Mem[$B800:(XPos+YPos*80)*2-161]:=
- (NOT Mem[$B800:(XPos+YPos*80)*2-161]) XOR 128;
- Delay(Forsinkelse);
- Mem[$B800:(XPos+YPos*80)*2-161]:=A;
- END;
- END;
-
- PROCEDURE SettPos(X,Y:INTEGER);
- BEGIN
- XPos:=X; YPos:=Y;
- END;
-
- PROCEDURE HentXY(VAR X,Y:INTEGER);
- BEGIN
- IF GlobalInit THEN
- BEGIN
- X:=XPos;
- Y:=YPos;
- END
- ELSE
- BEGIN
- X:=-1;
- Y:=-1;
- END;
- END;
-
- {═════════════════════════════════Joystick 1═════════════════════════════════}
-
- PROCEDURE JoyStick1(VAR X,Y,K1,K2:INTEGER);
- BEGIN INLINE
- ($BA/$01/$02/$EC/$A8/$03/$75/$FB/$B9/$2C/$01/$FA/$EE/$EC/$A8/$01/
- $E0/$FB/$BB/$2C/$01/$2B/$D9/$C4/$BE/x/$26/$89/$1D/$2B/$DB/$A8/$10/
- $75/$03/$83/$C3/$01/$C4/$BE/k1/$26/$89/$1D/$2B/$DB/$A8/$20/$75/$03/
- $83/$C3/$01/$C4/$BE/k2/$26/$89/$1D/$EC/$A8/$03/$75/$FB/$B9/$2C/$01/
- $EE/$EC/$A8/$02/$E0/$FB/$FB/$BB/$2C/$01/$2B/$D9/$C4/$BE/y/$26/$89/$1D);
- END;
-
- FUNCTION Stick1(VAR XRet,YRet:INTEGER):INTEGER;
- VAR
- X,Y,K1,K2:INTEGER;
- BEGIN
- JoyStick1(X,Y,K1,K2);
- Stick1:=K1+K2*2;
- XRet:=0; YRet:=0;
- IF X<GrenseX1a THEN XRet:=-1;
- IF X>GrenseX1b THEN XRet:=+1;
- IF Y<GrenseY1a THEN YRet:=-1;
- IF Y>GrenseY1b THEN YRet:=+1;
- IF GlobalInit THEN
- BEGIN
- XPos:=XPos+XRet;
- YPos:=YPos+YRet;
- IF XPos<MinX THEN XPos:=MinX;
- IF YPos<MinY THEN YPos:=MinY;
- IF XPos>MaxX THEN XPos:=MaxX;
- IF YPos>MaxY THEN YPos:=MaxY;
- END;
- END;
-
- PROCEDURE Initier1(A,B:BYTE);
- VAR
- K1,K2:INTEGER;
- BEGIN
- WRITELN; WRITELN(OV1); REPEAT Joystick1(X1a,Y1a,K1,K2); UNTIL K1=1;
- WRITELN; WRITELN(NH1); REPEAT Joystick1(X1b,Y1b,K1,K2); UNTIL K2=1;
- DeltaX1:=X1b-X1a; DeltaY1:=Y1b-Y1a; XRes1:=A; YRes1:=B;
- GrenseX1a:=TRUNC(X1a+DeltaX1/XRes1); GrenseX1b:=TRUNC(X1b-DeltaX1/XRes1);
- GrenseY1a:=TRUNC(Y1a+DeltaY1/YRes1); GrenseY1b:=TRUNC(Y1b-DeltaY1/YRes1);
- WRITELN(EJ1);
- END;
-
- PROCEDURE FinJuster1;
- VAR
- Knapp,Jx,Jy:INTEGER;
- Tast:CHAR;
- Ferdig:BOOLEAN;
- BEGIN
- TEXTMODE(CO80+Font8x8); TextAttr:=White+Blue*16; ClrScr;
- Grenser(1,1,80,50); SettPos(40,25); Ferdig:=FALSE;
- GotoXY(1,1); WRITE('Vertikalt :');
- GotoXY(1,2); WRITE('Hosisontalt:');
- GotoXY(1,3); WRITE('Knapper :');
- GotoXY(1,4); WRITE('X F¢lsomhet:');
- GotoXY(1,5); WRITE('Y F¢lsomhet:');
- GotoXY(1,7); WRITE('O : Y f¢lsomhet opp (Minker)');
- GotoXY(1,8); WRITE('N : Y f¢lsomhet ned ( ¥ker )');
- GotoXY(1,9); WRITE('H : X f¢lsomhet opp (Minker)');
- GotoXY(1,10); WRITE('V : X f¢lsomhet ned ( ¥ker )');
- GotoXY(1,12); WRITE('Trykk ESC for å avslutte!');
- REPEAT
- Knapp:=Stick1(Jx,Jy);
- VisPos(10);
- GotoXY(15,1); WRITE(' '); GotoXY(15,1); WRITE(Jy);
- GotoXY(15,2); WRITE(' '); GotoXY(15,2); WRITE(Jx);
- GotoXY(15,3); WRITE(' '); GotoXY(15,3); WRITE(Knapp);
- GotoXY(15,4); WRITE(' '); GotoXY(15,4); WRITE(XRes1);
- GotoXY(15,5); WRITE(' '); GotoXY(15,5); WRITE(YRes1);
- IF KeyPressed THEN
- BEGIN
- Tast:=ReadKey;
- IF ORD(Tast)=27 THEN Ferdig:=TRUE;
- Tast:=UPCASE(Tast);
- IF Tast='O' THEN DEC(YRes1);
- IF Tast='N' THEN INC(YRes1);
- IF Tast='H' THEN DEC(XRes1);
- IF Tast='V' THEN INC(XRes1);
- GrenseX1a:=TRUNC(X1a+DeltaX1/XRes1);
- GrenseX1b:=TRUNC(X1b-DeltaX1/XRes1);
- GrenseY1a:=TRUNC(Y1a+DeltaY1/YRes1);
- GrenseY1b:=TRUNC(Y1b-DeltaY1/YRes1);
- END;
- UNTIL Ferdig;
- GlobalInit:=FALSE;
- END;
-
- {═════════════════════════════════Joystick 1═════════════════════════════════}
- PROCEDURE JoyStick2(VAR X,Y,K1,K2:INTEGER);
- BEGIN INLINE
- ($BA/$01/$02/$EC/$A8/$0C/$75/$FB/$B9/$2C/$01/$FA/$EE/$EC/$A8/$04/
- $E0/$FB/$BB/$2C/$01/$2B/$D9/$C4/$BE/x/$26/$89/$1D/$2B/$DB/$A8/$40/
- $75/$03/$83/$C3/$01/$C4/$BE/k1/$26/$89/$1D/$2B/$DB/$A8/$80/$75/$03/
- $83/$C3/$01/$C4/$BE/k2/$26/$89/$1D/$EC/$A8/$0C/$75/$FB/$B9/$2C/$01/
- $EE/$EC/$A8/$08/$E0/$FB/$FB/$BB/$2C/$01/$2B/$D9/$C4/$BE/y/ $26/$89/$1D);
- END;
-
- FUNCTION Stick2(VAR XRet,YRet:INTEGER):INTEGER;
- VAR
- X,Y,K1,K2:INTEGER;
- BEGIN
- JoyStick2(X,Y,K1,K2);
- Stick2:=K1+K2*2;
- XRet:=0; YRet:=0;
- IF X<GrenseX2a THEN XRet:=-1;
- IF X>GrenseX2b THEN XRet:=+1;
- IF Y<GrenseY2a THEN YRet:=-1;
- IF Y>GrenseY2b THEN YRet:=+1;
- IF GlobalInit THEN
- BEGIN
- XPos:=XPos+XRet;
- YPos:=YPos+YRet;
- IF XPos<MinX THEN XPos:=MinX;
- IF YPos<MinY THEN YPos:=MinY;
- IF XPos>MaxX THEN XPos:=MaxX;
- IF YPos>MaxY THEN YPos:=MaxY;
- END;
- END;
-
- PROCEDURE Initier2(A,B:BYTE);
- VAR
- K1,K2:INTEGER;
- BEGIN
- WRITELN; WRITELN(OV2); REPEAT Joystick2(X2a,Y2a,K1,K2); UNTIL K1=1;
- WRITELN; WRITELN(NH2); REPEAT Joystick2(X2b,Y2b,K1,K2); UNTIL K2=1;
- DeltaX2:=X2b-X2a; DeltaY2:=Y2b-Y2a; XRes2:=A; YRes2:=B;
- GrenseX2a:=TRUNC(X2a+DeltaX2/XRes2); GrenseX2b:=TRUNC(X2b-DeltaX2/XRes2);
- GrenseY2a:=TRUNC(Y2a+DeltaY2/YRes2); GrenseY2b:=TRUNC(Y2b-DeltaY2/YRes2);
- WRITELN(EJ2);
- END;
-
- PROCEDURE FinJuster2;
- VAR
- Knapp,Jx,Jy:INTEGER;
- Tast:CHAR;
- Ferdig:BOOLEAN;
- BEGIN
- TEXTMODE(CO80+Font8x8); TextAttr:=White+Blue*16; ClrScr;
- Grenser(1,1,80,50); SettPos(40,25); Ferdig:=FALSE;
- GotoXY(1,1); WRITE('Vertikalt :');
- GotoXY(1,2); WRITE('Hosisontalt:');
- GotoXY(1,3); WRITE('Knapper :');
- GotoXY(1,4); WRITE('X F¢lsomhet:');
- GotoXY(1,5); WRITE('Y F¢lsomhet:');
- GotoXY(1,7); WRITE('O : Y f¢lsomhet opp (Minker)');
- GotoXY(1,8); WRITE('N : Y f¢lsomhet ned ( ¥ker )');
- GotoXY(1,9); WRITE('H : X f¢lsomhet opp (Minker)');
- GotoXY(1,10); WRITE('V : X f¢lsomhet ned ( ¥ker )');
- GotoXY(1,12); WRITE('Trykk ESC for å avslutte!');
- REPEAT
- Knapp:=Stick2(Jx,Jy);
- VisPos(10);
- GotoXY(15,1); WRITE(' '); GotoXY(15,1); WRITE(Jy);
- GotoXY(15,2); WRITE(' '); GotoXY(15,2); WRITE(Jx);
- GotoXY(15,3); WRITE(' '); GotoXY(15,3); WRITE(Knapp);
- GotoXY(15,4); WRITE(' '); GotoXY(15,4); WRITE(XRes2);
- GotoXY(15,5); WRITE(' '); GotoXY(15,5); WRITE(YRes2);
- IF KeyPressed THEN
- BEGIN
- Tast:=ReadKey;
- IF ORD(Tast)=27 THEN Ferdig:=TRUE;
- Tast:=UPCASE(Tast);
- IF Tast='O' THEN DEC(YRes2);
- IF Tast='N' THEN INC(YRes2);
- IF Tast='H' THEN DEC(XRes2);
- IF Tast='V' THEN INC(XRes2);
- GrenseX2a:=TRUNC(X2a+DeltaX2/XRes2);
- GrenseX2b:=TRUNC(X2b-DeltaX2/XRes2);
- GrenseY2a:=TRUNC(Y2a+DeltaY2/YRes2);
- GrenseY2b:=TRUNC(Y2b-DeltaY2/YRes2);
- END;
- UNTIL Ferdig;
- GlobalInit:=FALSE;
- END;
- {══════════════════════════════════Oppstart══════════════════════════════════}
- BEGIN
- OV1:='Skyv Joystick #1 til ¥vre Venstre hj¢rne, trykk knapp 1 .';
- NH1:='Skyv Joystick #1 til Nedre H¢yre hj¢rne, trykk knapp 2 .';
- EJ1:='Joystick #1 skulle nå være godt justert.';
- OV2:='Skyv Joystick #2 til ¥vre Venstre hj¢rne, trykk knapp 1 .';
- NH2:='Skyv Joystick #2 til Nedre H¢yre hj¢rne, trykk knapp 2 .';
- EJ2:='Joystick #2 skulle nå være godt justert.';
- GlobalInit:=FALSE;
- END.